import http from 'wechat-http'

// 仿照 axios的使用

// 1.baseURL
// 等同于 axios.defaults.baseURL
http.baseURL = 'https://live-api.itheima.net'

// 将http放到全局对象wx上
// 将来可以在任何位置直接使用
//请求拦截器
http.intercept.request = (params) => {
  // 配置请求头
  // 获取app实例上的token
  const { token } = getApp()
  // 扩展请求头信息
  const defaultHeader = {}

  if (token) defaultHeader.Authorization = token
  // 合并请求头信息
  params.header = Object.assign(defaultHeader, params.header)
  return params
}
// 响应拦截器
http.intercept.response = async (res) => {
  // 实现refresh_token刷新token功能
  // statusCode为响应状态码 401:token过期
  if (res.statusCode === 401) {
    // 判断refreshToken是否也过期了--通过判断当前请求是不是refreshToken请求
    if (res.config.url.include('/refreshToken')) {
      // 如果refreshToken过期了--存储当前页面路径--跳转到登录页面
      const pageStack = getCurrentPages()
      const lastPage = pageStack[pageStack.length - 1]
      // 取出当前页面路径，登录成功能跳转到该页面
      const redirectURL = lastPage.route
      // 返回登录页面
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}`,
      })
    }
    // 如果本地没有 refresh_token 没有必要刷新 token
    if (!app.refresh_token) return
    const app = getApp()
    // 通过refresh_token重新获取新token
    const { data } = await http({
      url: '/refreshToken',
      method: 'POST',
      header: app.refresh_Token,
    })
    // 更行token
    app.setToken(data.token, data.refreshToken)

    // 根据新的配置重新发送请求
    return http(
      Object.assign(res.config, {
        header: {
          Authorization: data.token,
        },
      })
    )
  }
  return res.data
}

wx.http = http
// 当前模块导出去
export default http
